using BSDS.Core.Data.Local;
using BSDS.Core.Data.TemporaryFiles;
using BSDS.Core.Infrastructure;
using BSDS.Core.Infrastructure.Logging;
using BSDS.Core.Model.Services;
using BSDS.Core.Model.Services.Geocoding;
using BSDS.Core.Model.Services.Jobs;
using BSDS.Core.Model.Services.Uploading;

namespace BSDS.Core.Intialization
{
    public class BsdsServicesLocator
    {
        public TempFolderManager TempFolderManager { get; private set; }
        internal NamedMutexHolder MutexHolder { get; private set; }

        public GeocodingService GeoService { get; private set; }
        public UploadService UploadService { get; private set; }
        public AccountService AccountService { get; private set; }
        public DownloadService DownloadService { get; private set; }

        public DataRepository DataRepository { get; private set; }
        public DataFormatRecognizer FormatRecognizer { get; private set; }
        public LoggerFactory LoggerFactory { get; set; }

        public JobRepository JobRepository { get; private set; }

        public JobService JobService { get; private set; }


        internal BsdsServicesLocator(TempFolderManager tempFolderManager, NamedMutexHolder mutexHolder, GeocodingService geoService,
            UploadService uploadService, AccountService accountService, DownloadService downloadService,
            DataRepository dataRepository, JobRepository jobRepository, JobService jobService, 
            DataFormatRecognizer formatRecognizer, LoggerFactory loggerFactory)
        {
            JobService = jobService;
            JobRepository = jobRepository;
            TempFolderManager = tempFolderManager;
            MutexHolder = mutexHolder;
            GeoService = geoService;
            UploadService = uploadService;
            DownloadService = downloadService;
            AccountService = accountService;
            DataRepository = dataRepository;
            FormatRecognizer = formatRecognizer;
            LoggerFactory = loggerFactory;
        }
    }
}